<?php

/**
 * Maikuro Framework
 *
 * LICENSE:
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * The license is bundled with this package in the file LICENSE.txt.
 * You may also obtain a copy of the License at this URL:
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * @copyright  Copyright (c) 2010, Jonathan Hedrén
 * @author     Jonathan Hedrén <jonathan.hedren@gmail.com>
 * @license    http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
 */

/**
 * @see PdoDbTransaction
 */
require_once 'PdoDbTransaction.php';

class PgsqlPdoDbTransaction extends PdoDbTransaction
{
    /**
     * Populates a DbResult object.
     *
     * Note that you must use "RETURNING columnName" in your query to get the
     * last insert id.
     *
     * @param PDOStatement $statement
     * @return DbResult
     */
    protected function populateResult(PDOStatement $statement)
    {
        $result = new DbResult();

        if (preg_match('/\b(?:INSERT|UPDATE|REPLACE|SET)\b/i', $statement->queryString)) {
            $result->setLastInsertId($statement->fetchColumn(0));
        } else if ($this->fetchClass !== null) {
            $result->setRowSet($statement->fetchAll(PDO::FETCH_CLASS, $this->fetchClass));
        } else {
            $result->setRowSet($statement->fetchAll(PDO::FETCH_OBJ));
        }

        $result->setAffectedRows($statement->rowCount());

        return $result;
    }
}